//
// Created by Tony on 2024/5/29.
//

#ifndef RUNTIME_SLOT_H
#define RUNTIME_SLOT_H

#include "Common.h"
#include <cstdint>

namespace Runtime {

class Slot {
    RtTaggedValue taggedValue;

public:
    Slot() = default;

    int64_t getInt64() const { return taggedValue.value.int64; }
    void setInt64(int64_t val) { taggedValue = RtTaggedValue(val); }

    double getFlt64() const { return taggedValue.value.flt64; }
    void setFlt64(double val) { taggedValue = RtTaggedValue(val); }

    RtData::Object* getRef() const { return taggedValue.value.ref; }
    void setRef(RtData::Object* ref) { taggedValue = RtTaggedValue(ref); }

    void setValue(const RtTaggedValue& value) { taggedValue = value; }
    RtTaggedValue getValue() const { return taggedValue; }
};

} // namespace Runtime

#endif // RUNTIME_SLOT_H
